package com.tarena.lbs.user.service.impl;

import com.github.pagehelper.PageInfo;
import com.tarena.lbs.base.common.utils.Asserts;
import com.tarena.lbs.base.protocol.exception.BusinessException;
import com.tarena.lbs.base.protocol.pager.PageResult;
import com.tarena.lbs.common.principle.UserPrinciple;
import com.tarena.lbs.common.utils.AuthenticationContextUtils;
import com.tarena.lbs.common.utils.PageConverter;
import com.tarena.lbs.user.dao.repository.UserGroupRepository;
import com.tarena.lbs.user.enums.UserResultEnum;
import com.tarena.lbs.user.pojo.param.UserGroupParam;
import com.tarena.lbs.user.pojo.po.UserGroupPO;
import com.tarena.lbs.user.pojo.vo.UserGroupVO;
import com.tarena.lbs.user.service.UserGroupService;
import io.jsonwebtoken.lang.Collections;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
@Slf4j
public class UserGroupServiceImpl implements UserGroupService {
    @Autowired
    private UserGroupRepository userGroupRepository;


    @Override
    public PageResult<UserGroupVO> listUserGroup() {
        // 用户人群列表查询业务处理
        log.info("用户人群列表查询业务处理");

        // 调用userGroupRepository的pageList方法，获取分页信息
        PageInfo<UserGroupPO> pageInfo=userGroupRepository.pageList();
        // 获取分页信息中的列表
        List<UserGroupPO> userGroupPOS = pageInfo.getList();
        // 创建UserGroupVO列表
        List<UserGroupVO> userGroupVOS = new ArrayList<>();
        // 判断列表是否为空
        if (!Collections.isEmpty(userGroupPOS)){
            // 遍历列表
            for (UserGroupPO userGroupPO:userGroupPOS){
                // 创建UserGroupVO对象
                UserGroupVO userGroupVO = new UserGroupVO();
                // 将UserGroupPO对象的属性复制到UserGroupVO对象中
                BeanUtils.copyProperties(userGroupPO,userGroupVO);
                LocalDateTime localDateTime = userGroupPO.getCreateAt().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                userGroupVO.setCreateAt(localDateTime);
                // 将UserGroupVO对象添加到列表中
                userGroupVOS.add(userGroupVO);
            }
        }
        // 返回PageResult对象
        return PageConverter.convert(pageInfo, userGroupVOS);
    }

    @Override
    public void add(UserGroupParam userGroupParam) throws BusinessException {
        log.info("用户人群添加业务处理:{}", userGroupParam);
        //校验用户人群名称是否重复
        int n = userGroupRepository.isExist(userGroupParam.getGroupName());
        Asserts.isTrue(n>0,new BusinessException(UserResultEnum.USERGROUP_NOT_EXISTS));
        UserGroupPO userGroupPO = new UserGroupPO();
        BeanUtils.copyProperties(userGroupParam, userGroupPO);
        userGroupPO.setCreateAt(new Date());
        userGroupRepository.add(userGroupPO);
    }

    @Override
    public UserGroupVO detail(Integer id) throws BusinessException {
        log.info("用户人群详情业务处理:{}", id);
        AuthenticationContextUtils.getUserPrinciple();
        UserGroupPO userGroupPO = userGroupRepository.detail(id);
        UserGroupVO userGroupVO = new UserGroupVO();
        BeanUtils.copyProperties(userGroupPO, userGroupVO);
        return userGroupVO;
    }
}
